package com.ashapo.jdbc.l004callablestat;

//JDBC调用存储过程

//STEP 1. Import required packages
import java.sql.*;

public class JDBCCallableStatement {
    // JDBC driver name and database URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost/gm_test";

    //  Database credentials
    static final String USER = "root";
    static final String PASS = "123456";

    public static void main(String[] args) {
        Connection conn = null;
        CallableStatement stmt = null;
        try{
            //STEP 2: Register JDBC driver
            Class.forName(JDBC_DRIVER);

            //STEP 3: Open a connection
            System.out.println("Connecting to database...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);

            //STEP 4: Execute a query
            System.out.println("Creating statement...");
            String sql = "{call getUserName (?, ?)}";
            stmt = conn.prepareCall(sql);

            //Bind IN parameter first, then bind OUT parameter
            int userID = 92;
            stmt.setInt(1, userID); // This would set ID as 92
            // Because second parameter is OUT so register it
            stmt.registerOutParameter(2, Types.VARCHAR);

            //Use execute method to run stored procedure.
            System.out.println("Executing stored procedure..." );
            stmt.execute();

            //Retrieve employee name with getXXX method
            String userName = stmt.getString(2);
            System.out.println("Emp Name with ID:" + userID + " is " + userName);
            stmt.close();
            conn.close();
        }catch(SQLException se){
            //Handle errors for JDBC
            se.printStackTrace();
        }catch(Exception e){
            //Handle errors for Class.forName
            e.printStackTrace();
        }finally{
            //finally block used to close resources
            try{
                if(stmt!=null)
                    stmt.close();
            }catch(SQLException se2){
            }// nothing we can do
            try{
                if(conn!=null)
                    conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }//end finally try
        }//end try
        System.out.println("Goodbye!");
    }//end main
}//end JDBCExample
